package top.milkbox.sys.modular.permission.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import top.milkbox.sys.modular.permission.entity.SysPermissionEntity;
import top.milkbox.sys.modular.permission.param.SysPermissionAddParam;
import top.milkbox.sys.modular.permission.param.SysPermissionEditParam;
import top.milkbox.sys.modular.permission.param.SysPermissionIdParam;
import top.milkbox.sys.modular.permission.param.SysPermissionPageParam;
import top.milkbox.sys.modular.permission.vo.SysPermissionVo;

import java.util.List;

/**
 * 系统_权限表（sys_permission）服务层接口<br />
 * 权限表的修改仅作用在数据中，对于redis中保存的已经登录用户的权限信息不会改变。需要根据情况手动调整。
 *
 * @author milkbox
 * @date 2024-10-31
 */
public interface SysPermissionService extends IService<SysPermissionEntity> {

    /**
     * 添加
     *
     * @param addParam 添加参数
     */
    void add(SysPermissionAddParam addParam);

    /**
     * 删除
     *
     * @param paramList 删除id对象集合
     */
    void delete(List<SysPermissionIdParam> paramList);

    /**
     * 通过id编辑
     *
     * @param editParam 编辑参数
     */
    void edit(SysPermissionEditParam editParam);

    /**
     * 通过id查询详情
     *
     * @param idParam id参数
     * @return 返回查询的详情，如果没有则返回空
     */
    SysPermissionVo detail(SysPermissionIdParam idParam);

    /**
     * 查询实体，即简单查询，包含存在性校验，不存在报业务异常
     *
     * @param entityId 实体id
     * @return 返回实体
     */
    SysPermissionEntity findEntity(Integer entityId);

    /**
     * 分页查询
     *
     * @param pageParam 分页查询参数
     * @return 返回苞米豆的分页对象，没有数据，则record长度为0
     */
    Page<SysPermissionVo> page(SysPermissionPageParam pageParam);

    /**
     * 根据当前登录的用户查询拥有的权限列表，包括用户所在的角色拥有的权限
     *
     * @return 返回权限列表
     */
    List<SysPermissionEntity> listByLoginUser();

    /**
     * 根据权限码（value）查询权限
     *
     * @param value 权限码
     * @return 返回权限对象，如果不存在则返回null
     */
    SysPermissionVo getByValue(String value);

}